#include <bits/stdc++.h>
using namespace std;
vector<int> hash_list[100];
int n;
int tmp, tmp2;
int main()
{
    //哈希表
    //这个东西是基于键值对实现的
    //举个例子
    //有这样的一些数据
    //一个ID对应一个数
    //如ID=5,value=10
    //在某些情况下,ID不一定是数字,有可能是字符串
    //所以只用数组就不能简单地用数组存数据了
    //这时就要基于ID来计算出一个位置存到数组里
    //这就是哈希表的原理
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> tmp2 >> tmp;
        hash_list[tmp2 % 11].push_back(tmp); //此处的计算位置的方式是ID%11,一般用取模的方式来算,模数是一个质数
        //此处使用vector实现是为了避免冲突
        //如1%11和12%11,两个结果一样,哈希地址就一样,这就是冲突
        //使用vector,将冲突的元素在同一位置向后累加,就像链表一样
    }
    for (int i = 0; i < 100; i++)
    {
        if (hash_list[i].size()) //当这个表内有元素时输出
        {
            cout << "#" << i << ": ";
            for (int j = 0; j <= hash_list[i].size() - 1; j++)
                cout << hash_list[i][j] << ' ';
            cout << endl;
        }
    }
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> tmp2;
        for (int i = 0; i <= hash_list[tmp2 % 11].size() - 1; i++)
            cout << hash_list[tmp2 % 11][i] << ' ';
    }
    cout << endl;
    for (int i = 0; i < 100; i++)
    {
        if (hash_list[i].size())
        {
            cout << "#" << i << ": ";
            for (int j = 0; j <= hash_list[i].size() - 1; j++)
                cout << hash_list[i][j] << ' ';
            cout << endl;
        }
    }
    return 0;
}